#include <cstdio>
#include <algorithm>
#include <cstring>
using namespace std;
const int MAXN=200020;
int dp[MAXN];
char s[MAXN];
int main(void){
    scanf("%s",s);
    int len=strlen(s);
    if((s[0]-'0')%3==0){
        dp[1]=1;
    }
    else{
        dp[1]=0;
    }
    //dp时主要是要考虑当前判断的位置是否与前面组成3的倍数
    for(int i=2;i<=len;i++){
        int f=0;
        dp[i]=dp[i-1];
        int sum=0;
        int j;
        for(j=i;j>=1;j--){
            sum+=s[j-1]-'0';
            if(sum%3==0){
                f=1;
                //跳出时则记录当前的j 也就是从i往左到j这段是3的倍数
                break;
            }
            //如果dp[j-1]<dp[i-1] 则没有必要再继续往左走
            //因为最多加上i往左到j这一段也就是和dp[i-1]相等 没必要
            else if(dp[j-1]<dp[i-1]){
                break;
            }
        }
        if(f){
            //那这里更新的就应该以dp[j-1]为基础了
            dp[i]=dp[j-1]+1;
            printf("dp//%d\n",dp[4]);
        }
    }
    printf("%d\n",dp[len]);
    return 0;
}
